Django REST Framework (DRF) হলো Django-এর একটি শক্তিশালী এবং জনপ্রিয় লাইব্রেরি, যা API (Application Programming Interface) ডেভেলপমেন্টে ব্যবহৃত হয়। এটি HTTP ভিত্তিক ওয়েব সার্ভিস তৈরি এবং ব্যবস্থাপনার জন্য একটি সহজ এবং কার্যকরী পদ্ধতি প্রদান করে। DRF ব্যবহার করে আপনি দ্রুত এবং নিরাপদ API তৈরি করতে পারবেন, যা ফ্রন্টএন্ড অ্যাপ্লিকেশন (যেমন React, Angular, বা Vue.js) বা মোবাইল অ্যাপ্লিকেশনের সাথে সংযুক্ত হতে পারে।
Django REST Framework এর সুবিধাসমূহ
- সহজ ইন্টিগ্রেশন: Django এর সাথে সহজে ইন্টিগ্রেট করা যায় এবং এর সাথে কাজ করা হয় Django এর ORM (Object-Relational Mapping) ব্যবহার করে।
- স্বয়ংক্রিয় ডকুমেন্টেশন: Swagger বা ReDoc এর মতো টুল ব্যবহার করে API ডকুমেন্টেশন তৈরি করা সম্ভব।
- সক্ষম Authentication এবং Permission ব্যবস্থা: এটি অন্তর্নির্মিত অথেনটিকেশন এবং পারমিশন সিস্টেম প্রদান করে, যার মাধ্যমে আপনি নির্দিষ্ট ইউজারদের জন্য API অ্যাক্সেস কন্ট্রোল করতে পারেন।
- উন্নত Serialization: ডেটাকে JSON বা XML ফর্ম্যাটে রূপান্তর করা সহজ এবং সুন্দরভাবে কাস্টমাইজ করা যায়।
- Query Parameters এর সহজ সমর্থন: আপনাকে ডেটা ফিল্টার, পেজিনেট, এবং সোর্ট করার জন্য সরল পদ্ধতি প্রদান করে।
Django REST Framework সেটআপ
১. Django REST Framework ইনস্টল করা
প্রথমে, DRF ইনস্টল করতে হবে:
pip install djangorestframework
এটি ইনস্টল করার পরে, আপনাকে settings.py ফাইলে DRF অ্যাপ যোগ করতে হবে:
# settings.py
INSTALLED_APPS = [
...
'rest_framework', # Django REST Framework অ্যাপ
]
২. Serializer তৈরি করা
Django REST Framework এর অন্যতম শক্তিশালী বৈশিষ্ট্য হল serializers, যা ডেটাকে JSON, XML ইত্যাদি ফর্ম্যাটে রূপান্তর করতে সহায়তা করে। প্রথমে, একটি serializer তৈরি করতে হবে।
# serializers.py
from rest_framework import serializers
from .models import Product
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ['id', 'name', 'price', 'available']
এখানে:
ProductSerializerএকটি মডেল সিরিয়ালাইজার, যাProductমডেলের ডেটা JSON ফর্ম্যাটে রূপান্তর করবে।
৩. Views তৈরি করা
DRF তে API তৈরি করতে APIView বা viewsets ব্যবহার করা হয়। সাধারণভাবে, APIView এর মাধ্যমে আপনি কাস্টম লজিক লিখতে পারেন, এবং viewsets ব্যবহার করলে ডিফল্ট CRUD অপারেশনগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়।
APIView এর মাধ্যমে API তৈরি:
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Product
from .serializers import ProductSerializer
class ProductList(APIView):
def get(self, request, format=None):
products = Product.objects.all()
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
def post(self, request, format=None):
serializer = ProductSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
এখানে:
get()মেথডটি সমস্ত পণ্য ফেরত দেয়।post()মেথডটি নতুন পণ্য তৈরি করে।
৪. URLs কনফিগারেশন
এখন আপনাকে urls.py ফাইলে এই API রুটগুলো কনফিগার করতে হবে।
# urls.py
from django.urls import path
from .views import ProductList
urlpatterns = [
path('products/', ProductList.as_view(), name='product-list'),
]
এখন /products/ URL তে GET বা POST রিকোয়েস্ট পাঠালে, আপনার তৈরি API রেসপন্স দেবে।
Django REST Framework এ Authentication এবং Permissions
Django REST Framework আপনাকে API-এর জন্য বিভিন্ন ধরনের authentication এবং permission ব্যবস্থা প্রদান করে। আপনি চাইলে API গুলিতে authentication ও permissions যোগ করতে পারেন, যাতে কেবল নির্দিষ্ট ইউজার বা গ্রুপ অ্যাক্সেস পায়।
১. Authentication যুক্ত করা
DRF তে সাধারণত ৩ ধরনের authentication ব্যবহৃত হয়:
- Session Authentication (ডিফল্ট)
- Token Authentication
- Basic Authentication
Token Authentication ব্যবহার করার জন্য:
djangorestframework-simplejwtইনস্টল করুন:pip install djangorestframework-simplejwtsettings.pyতে authentication কনফিগার করুন:# settings.py REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication', ], }
২. Permissions যুক্ত করা
Permissions ক্লাসগুলো আপনাকে নির্দিষ্ট ইউজারের জন্য বা অ্যাক্সেস কন্ট্রোল করার জন্য ব্যবহার করা হয়। উদাহরণস্বরূপ:
# views.py
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
class ProductList(APIView):
permission_classes = [IsAuthenticated] # কেবল লগইন করা ইউজারদের জন্য
def get(self, request):
products = Product.objects.all()
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
এখানে, IsAuthenticated permission ক্লাসটি নিশ্চিত করে যে কেবল অথেনটিকেটেড ইউজাররা এই API অ্যাক্সেস করতে পারবে।
Django REST Framework (DRF) Django এ শক্তিশালী এবং স্বয়ংক্রিয় API ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। এটি সহজ এবং কার্যকরীভাবে RESTful API তৈরি, ডেটা সিরিয়ালাইজেশন, অথেনটিকেশন, পারমিশন এবং রাউটিং পরিচালনা করতে সহায়তা করে। DRF ব্যবহার করে আপনি আপনার Django অ্যাপ্লিকেশনকে API ভিত্তিক করতে পারেন, যা মোবাইল অ্যাপ্লিকেশন, সিঙ্গল পেজ অ্যাপ্লিকেশন (SPA) বা অন্যান্য ক্লায়েন্টদের সাথে যোগাযোগ করতে পারে।
Django REST Framework (DRF) হলো Django-এর একটি শক্তিশালী এবং জনপ্রিয় লাইব্রেরি, যা API (Application Programming Interface) ডেভেলপমেন্টে ব্যবহৃত হয়। এটি HTTP ভিত্তিক ওয়েব সার্ভিস তৈরি এবং ব্যবস্থাপনার জন্য একটি সহজ এবং কার্যকরী পদ্ধতি প্রদান করে। DRF ব্যবহার করে আপনি দ্রুত এবং নিরাপদ API তৈরি করতে পারবেন, যা ফ্রন্টএন্ড অ্যাপ্লিকেশন (যেমন React, Angular, বা Vue.js) বা মোবাইল অ্যাপ্লিকেশনের সাথে সংযুক্ত হতে পারে।
Django REST Framework এর সুবিধাসমূহ
- সহজ ইন্টিগ্রেশন: Django এর সাথে সহজে ইন্টিগ্রেট করা যায় এবং এর সাথে কাজ করা হয় Django এর ORM (Object-Relational Mapping) ব্যবহার করে।
- স্বয়ংক্রিয় ডকুমেন্টেশন: Swagger বা ReDoc এর মতো টুল ব্যবহার করে API ডকুমেন্টেশন তৈরি করা সম্ভব।
- সক্ষম Authentication এবং Permission ব্যবস্থা: এটি অন্তর্নির্মিত অথেনটিকেশন এবং পারমিশন সিস্টেম প্রদান করে, যার মাধ্যমে আপনি নির্দিষ্ট ইউজারদের জন্য API অ্যাক্সেস কন্ট্রোল করতে পারেন।
- উন্নত Serialization: ডেটাকে JSON বা XML ফর্ম্যাটে রূপান্তর করা সহজ এবং সুন্দরভাবে কাস্টমাইজ করা যায়।
- Query Parameters এর সহজ সমর্থন: আপনাকে ডেটা ফিল্টার, পেজিনেট, এবং সোর্ট করার জন্য সরল পদ্ধতি প্রদান করে।
Django REST Framework সেটআপ
১. Django REST Framework ইনস্টল করা
প্রথমে, DRF ইনস্টল করতে হবে:
pip install djangorestframework
এটি ইনস্টল করার পরে, আপনাকে settings.py ফাইলে DRF অ্যাপ যোগ করতে হবে:
# settings.py
INSTALLED_APPS = [
...
'rest_framework', # Django REST Framework অ্যাপ
]
২. Serializer তৈরি করা
Django REST Framework এর অন্যতম শক্তিশালী বৈশিষ্ট্য হল serializers, যা ডেটাকে JSON, XML ইত্যাদি ফর্ম্যাটে রূপান্তর করতে সহায়তা করে। প্রথমে, একটি serializer তৈরি করতে হবে।
# serializers.py
from rest_framework import serializers
from .models import Product
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ['id', 'name', 'price', 'available']
এখানে:
ProductSerializerএকটি মডেল সিরিয়ালাইজার, যাProductমডেলের ডেটা JSON ফর্ম্যাটে রূপান্তর করবে।
৩. Views তৈরি করা
DRF তে API তৈরি করতে APIView বা viewsets ব্যবহার করা হয়। সাধারণভাবে, APIView এর মাধ্যমে আপনি কাস্টম লজিক লিখতে পারেন, এবং viewsets ব্যবহার করলে ডিফল্ট CRUD অপারেশনগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়।
APIView এর মাধ্যমে API তৈরি:
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Product
from .serializers import ProductSerializer
class ProductList(APIView):
def get(self, request, format=None):
products = Product.objects.all()
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
def post(self, request, format=None):
serializer = ProductSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
এখানে:
get()মেথডটি সমস্ত পণ্য ফেরত দেয়।post()মেথডটি নতুন পণ্য তৈরি করে।
৪. URLs কনফিগারেশন
এখন আপনাকে urls.py ফাইলে এই API রুটগুলো কনফিগার করতে হবে।
# urls.py
from django.urls import path
from .views import ProductList
urlpatterns = [
path('products/', ProductList.as_view(), name='product-list'),
]
এখন /products/ URL তে GET বা POST রিকোয়েস্ট পাঠালে, আপনার তৈরি API রেসপন্স দেবে।
Django REST Framework এ Authentication এবং Permissions
Django REST Framework আপনাকে API-এর জন্য বিভিন্ন ধরনের authentication এবং permission ব্যবস্থা প্রদান করে। আপনি চাইলে API গুলিতে authentication ও permissions যোগ করতে পারেন, যাতে কেবল নির্দিষ্ট ইউজার বা গ্রুপ অ্যাক্সেস পায়।
১. Authentication যুক্ত করা
DRF তে সাধারণত ৩ ধরনের authentication ব্যবহৃত হয়:
- Session Authentication (ডিফল্ট)
- Token Authentication
- Basic Authentication
Token Authentication ব্যবহার করার জন্য:
djangorestframework-simplejwtইনস্টল করুন:pip install djangorestframework-simplejwtsettings.pyতে authentication কনফিগার করুন:# settings.py REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication', ], }
২. Permissions যুক্ত করা
Permissions ক্লাসগুলো আপনাকে নির্দিষ্ট ইউজারের জন্য বা অ্যাক্সেস কন্ট্রোল করার জন্য ব্যবহার করা হয়। উদাহরণস্বরূপ:
# views.py
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
class ProductList(APIView):
permission_classes = [IsAuthenticated] # কেবল লগইন করা ইউজারদের জন্য
def get(self, request):
products = Product.objects.all()
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
এখানে, IsAuthenticated permission ক্লাসটি নিশ্চিত করে যে কেবল অথেনটিকেটেড ইউজাররা এই API অ্যাক্সেস করতে পারবে।
Conclusion
Django REST Framework (DRF) Django এ শক্তিশালী এবং স্বয়ংক্রিয় API ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। এটি সহজ এবং কার্যকরীভাবে RESTful API তৈরি, ডেটা সিরিয়ালাইজেশন, অথেনটিকেশন, পারমিশন এবং রাউটিং পরিচালনা করতে সহায়তা করে। DRF ব্যবহার করে আপনি আপনার Django অ্যাপ্লিকেশনকে API ভিত্তিক করতে পারেন, যা মোবাইল অ্যাপ্লিকেশন, সিঙ্গল পেজ অ্যাপ্লিকেশন (SPA) বা অন্যান্য ক্লায়েন্টদের সাথে যোগাযোগ করতে পারে।
Django তে Serializer এবং ViewSet হল Django REST Framework (DRF) এর গুরুত্বপূর্ণ অংশ, যা API তৈরি করার সময় ডেটার সিরিয়ালাইজেশন (data serialization) এবং ভিউ সেট আপ (view set up) সহজ করে তোলে। Serializer ডেটাকে JSON বা অন্যান্য ফরম্যাটে রূপান্তরিত করে, এবং ViewSet বিভিন্ন HTTP রিকোয়েস্ট (GET, POST, PUT, DELETE) এর জন্য কন্ট্রোলার হিসেবে কাজ করে।
১. Serializer কী?
Serializer Django REST Framework (DRF) এর একটি কম্পোনেন্ট যা ডেটাকে Python ডেটা স্ট্রাকচার থেকে JSON বা অন্য ফরম্যাটে রূপান্তরিত করে (serialization), এবং একইভাবে JSON বা অন্য ফরম্যাট থেকে Python ডেটা স্ট্রাকচারেও রূপান্তরিত করে (deserialization)। এটি মূলত Model অথবা Dictionary থেকে JSON ফরম্যাটে ডেটা আউটপুট করতে ব্যবহৃত হয়।
Serializer তৈরি করার ধাপ
- প্রথমে আপনাকে একটি মডেল তৈরি করতে হবে, যেটা আপনি সিরিয়ালাইজ করতে চান।
- এরপর, সেই মডেলটির জন্য একটি Serializer ক্লাস তৈরি করতে হবে।
উদাহরণ:
ধরা যাক, আমাদের একটি Book মডেল আছে, যেটি আমরা সিরিয়ালাইজ করতে চাই।
মডেল:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()
def __str__(self):
return self.title
Serializer তৈরি:
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'author', 'published_date']
এখানে:
BookSerializerক্লাসটিModelSerializerথেকে ইনহেরিট করেছে, যেটি ডেটাবেস মডেলের উপর ভিত্তি করে সিরিয়ালাইজেশন প্রক্রিয়া সহজ করে।Metaক্লাসে মডেলটি এবং এর ফিল্ডগুলো স্পেসিফাই করা হয়েছে, যা ডেটা JSON আউটপুটে রূপান্তরিত করবে।
২. ViewSet কী?
ViewSet হলো Django REST Framework এর একটি ক্লাস যা HTTP রিকোয়েস্টের জন্য বিভিন্ন ভিউ ফাংশন (যেমন GET, POST, PUT, DELETE) একত্রিত করে। এটি Django-তে API তৈরি করার ক্ষেত্রে ডেটা হ্যান্ডলিং এবং রাউটিংকে সহজ করে তোলে।
ViewSet এর প্রধান সুবিধা হলো এটি কোডের পুনঃব্যবহারযোগ্যতা এবং দ্রুত API ডেভেলপমেন্ট নিশ্চিত করে, কারণ এতে HTTP রিকোয়েস্ট হ্যান্ডল করার জন্য আলাদা আলাদা ভিউ ফাংশন লিখতে হয় না।
ViewSet তৈরি করার ধাপ
- প্রথমে, আপনার serializer তৈরি করতে হবে।
- এরপর, ViewSet ক্লাস তৈরি করতে হবে, যা আপনার serializer এবং মডেল সংযুক্ত করবে।
উদাহরণ:
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
এখানে:
BookViewSetক্লাসটিModelViewSetথেকে ইনহেরিট করেছে, যা সিলেক্টেড মডেলের জন্য ডিফল্ট CRUD অপারেশন (Create, Read, Update, Delete) সরবরাহ করে।queryset: এটি সেই মডেল অবজেক্টগুলোর তালিকা যা আপনি API রেসপন্সে পেতে চান।serializer_class: এখানে আমরাBookSerializerব্যবহার করছি, যাতে Book মডেলের ডেটা JSON ফরম্যাটে রূপান্তরিত হয়।
৩. URL Routing
ViewSet তৈরি করার পর, আপনাকে এই ViewSet কে URL পাথে যুক্ত করতে হবে, যাতে ক্লায়েন্ট HTTP রিকোয়েস্ট পাঠাতে পারে। Django REST Framework এ router ব্যবহার করে এই রাউটিং সম্পন্ন করা যায়।
উদাহরণ:
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import BookViewSet
# Router সেট আপ
router = DefaultRouter()
router.register(r'books', BookViewSet)
# URL patterns
urlpatterns = [
path('api/', include(router.urls)),
]
এখানে:
DefaultRouterএকটি ডিফল্ট রাউটার যাModelViewSetএ থাকা ডিফল্ট ভিউ ফাংশনগুলো রেজিস্টার করে, যেমন list, create, retrieve, update, destroy ইত্যাদি।path('api/', include(router.urls))URL প্যাথ এbooksরাউটিং পয়েন্ট যুক্ত করেছে, যাBookViewSetএর সকল অপারেশনকে HTTP রিকোয়েস্ট হ্যান্ডল করতে সক্ষম করবে।
৪. API ব্যবহার
এখন আপনি Django API এ books রাউটের মাধ্যমে বিভিন্ন HTTP রিকোয়েস্ট পাঠিয়ে Book মডেলের ডেটা অ্যাক্সেস এবং ম্যানিপুলেট করতে পারবেন।
- GET
/api/books/- সমস্ত বইয়ের তালিকা। - POST
/api/books/- নতুন বই তৈরি। - GET
/api/books/{id}/- নির্দিষ্ট বইয়ের বিস্তারিত। - PUT
/api/books/{id}/- নির্দিষ্ট বই আপডেট। - DELETE
/api/books/{id}/- নির্দিষ্ট বই মুছে ফেলা।
সারাংশ
- Serializer Django REST Framework এর একটি গুরুত্বপূর্ণ অংশ, যা ডেটাকে JSON বা অন্য ফরম্যাটে রূপান্তরিত করে।
- ViewSet ডিফল্ট CRUD অপারেশন সরবরাহ করে এবং API তৈরি করা সহজ করে।
- URL Routing এবং Router ব্যবহার করে ViewSet কে URL পাথে যুক্ত করতে হয়।
এভাবে আপনি Django REST Framework এর মাধ্যমে খুব সহজেই একটি API তৈরি করতে পারেন।
API authentication হল একটি গুরুত্বপূর্ণ বিষয় যখন আপনি Django তে API তৈরি করেন এবং সেগুলিকে নিরাপদ করতে চান। API এর মাধ্যমে ব্যবহারকারীরা বিভিন্ন ধরনের ডাটা অ্যাক্সেস করতে পারে, সুতরাং যথাযথ authentication ব্যবস্থা থাকা জরুরি। Django তে API authentication এর জন্য বেশ কিছু পদ্ধতি রয়েছে, যার মধ্যে সবচেয়ে জনপ্রিয় দুটি হল Token Authentication এবং OAuth Authentication।
১. Token Authentication
Token Authentication একটি সাধারণ এবং নিরাপদ পদ্ধতি যেখানে একটি ব্যবহারকারী লগইন করার পরে তাকে একটি ইউনিক টোকেন প্রদান করা হয়। এই টোকেনটি ব্যবহারকারীর পরিচয় যাচাই করার জন্য পরবর্তী রিকোয়েস্টে পাঠানো হয়। Django তে Token Authentication সেটআপ করতে Django REST Framework (DRF) ব্যবহার করা হয়।
Token Authentication এর মাধ্যমে API Authentication সেটআপ
- Django REST Framework ইনস্টল করা
প্রথমে আপনাকে Django REST Framework এবং djangorestframework-simplejwt প্যাকেজ ইনস্টল করতে হবে। এই প্যাকেজটি JWT (JSON Web Token) সাপোর্ট প্রদান করে।
pip install djangorestframework djangorestframework-simplejwt
- INSTALLED_APPS এ REST Framework যুক্ত করা
settings.py ফাইলে INSTALLED_APPS এ Django REST Framework যুক্ত করতে হবে।
# settings.py
INSTALLED_APPS = [
# অন্যান্য অ্যাপস
'rest_framework',
'rest_framework.authtoken', # Token Authentication এর জন্য
]
- Token Authentication মডিউল কনফিগার করা
এখন আপনাকে TokenAuthentication সেটআপ করতে হবে। settings.py ফাইলে DRF এর ডিফল্ট কনফিগারেশন সেট করুন।
# settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
- Token মডেল তৈরি এবং মাইগ্রেশন
এখন আপনাকে Token মডেল তৈরি এবং মাইগ্রেট করতে হবে।
python manage.py migrate
- Token তৈরি করা
ব্যবহারকারী যদি লগইন করে, তবে আপনি তাকে একটি Token প্রদান করবেন। Django REST Framework এ obtain_auth_token ভিউ দিয়ে এটি করা যায়।
urls.py তে URL কনফিগার করুন:
# urls.py
from django.urls import path
from rest_framework.authtoken.views import obtain_auth_token
urlpatterns = [
path('api-token-auth/', obtain_auth_token), # Token authentication endpoint
]
এখন, ব্যবহারকারী যখন POST /api-token-auth/ এ তার ইউজারনেম এবং পাসওয়ার্ড পাঠাবে, তখন তাকে একটি টোকেন দেওয়া হবে যা পরবর্তী API রিকোয়েস্টে ব্যবহার করা যাবে।
২. OAuth Authentication
OAuth হল একটি প্রোটোকল যা ইউজারের অথেনটিকেশন এবং অথোরাইজেশন পরিচালনা করার জন্য ব্যবহার করা হয়। এটি ইউজারের লগইন ডেটা সরাসরি শেয়ার না করে, সেকেন্ড পার্টি অ্যাপ্লিকেশনকে ইউজারের ডেটা অ্যাক্সেস করার অনুমতি দেয়। Django তে OAuth ব্যবহার করতে আপনি django-oauth-toolkit প্যাকেজ ব্যবহার করতে পারেন।
OAuth Authentication এর মাধ্যমে API Authentication সেটআপ
django-oauth-toolkitইনস্টল করা
প্রথমে আপনাকে django-oauth-toolkit প্যাকেজ ইনস্টল করতে হবে।
pip install django-oauth-toolkit
- INSTALLED_APPS এ
oauth2_providerযুক্ত করা
এটি settings.py তে INSTALLED_APPS এ যোগ করুন।
# settings.py
INSTALLED_APPS = [
# অন্যান্য অ্যাপস
'oauth2_provider',
]
- URLs কনফিগারেশন
OAuth রাউটগুলো urls.py ফাইলে যুক্ত করতে হবে।
# urls.py
from django.urls import path, include
urlpatterns = [
path('auth/', include('oauth2_provider.urls', namespace='oauth2_provider')),
# অন্যান্য API রাউট
]
- OAuth Application তৈরি করা
এখন আপনি OAuth2 Application তৈরি করবেন। এটি তৈরি করতে Django অ্যাডমিন প্যানেল ব্যবহার করতে পারেন।
- Django অ্যাডমিনে লগইন করুন এবং OAuth2 Provider সেকশনে যান।
- একটি নতুন Application তৈরি করুন। এখানে আপনি client id এবং client secret পাবেন, যা আপনাকে OAuth প্রক্রিয়ায় ব্যবহার করতে হবে।
- OAuth Authentication কনফিগারেশন
Django REST Framework তে OAuth ব্যবহার করার জন্য, আপনাকে DEFAULT_AUTHENTICATION_CLASSES এ OAuth authentication ক্লাস যোগ করতে হবে।
# settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
],
}
এখন OAuth এর মাধ্যমে API Authentication সম্পন্ন হবে। আপনি টোকেন ব্যবহারকারীকে পাঠিয়ে তার অনুমোদন পেতে পারেন।
৩. Token এবং OAuth এর মধ্যে পার্থক্য
| ফিচার | Token Authentication | OAuth Authentication |
|---|---|---|
| অথেনটিকেশন টাইপ | স্ট্যাটিক টোকেন ব্যবহার করে | Dynamic authorization (third-party) |
| ব্যবহার | API এর মধ্যে একক ইউজারের অথেনটিকেশন | তৃতীয় পক্ষের অ্যাপ্লিকেশন দ্বারা ইউজারের ডেটা অ্যাক্সেস |
| সিকিউরিটি | সিম্পল, তবে সিকিউরিটি রিস্ক থাকতে পারে | অধিক সিকিউর, কারণ ইউজারের পাসওয়ার্ড শেয়ার হয় না |
| ইউজার ইন্টারঅ্যাকশন | ইউজারকে প্রতিবার টোকেন পাঠাতে হয় | একবার অথোরাইজেশন, তারপর অ্যাক্সেস টোকেন ব্যবহার |
সারাংশ
- Token Authentication API এর জন্য একটি সহজ পদ্ধতি, যেখানে ব্যবহারকারী লগইন করার পরে একটি টোকেন পায় এবং এটি API রিকোয়েস্টের সঙ্গে পাঠানো হয়।
- OAuth Authentication একটি শক্তিশালী অথেনটিকেশন প্রোটোকল, যা ইউজারের ডেটা এক্সেসের জন্য অনুমতি প্রদান করে, তাতে ইউজারের পাসওয়ার্ড শেয়ার করা হয় না।
- Django তে উভয় পদ্ধতিই ব্যবহার করা সম্ভব এবং আপনার প্রোজেক্টের প্রয়োজন অনুযায়ী যেকোনো একটি পদ্ধতি বেছে নিতে পারেন।
Django তে RESTful API তৈরি করা একটি সাধারণ পদ্ধতি হয়ে উঠেছে, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা বিনিময়ের জন্য ব্যবহৃত হয়। Django তে RESTful API তৈরি করার জন্য সাধারণত Django REST framework (DRF) ব্যবহার করা হয়। Django REST framework একটি শক্তিশালী টুলকিট যা Django অ্যাপ্লিকেশনের সাথে RESTful API তৈরি এবং ব্যবহারে সহজতা প্রদান করে।
এখানে আমরা Django তে RESTful API তৈরি করার মূল ধারণা এবং DRF ব্যবহার করার নিয়ম দেখবো।
১. Django REST Framework ইনস্টল করা
প্রথমে, আপনাকে Django REST framework (DRF) ইনস্টল করতে হবে। এটি পিপ (pip) ব্যবহার করে ইনস্টল করা যায়:
pip install djangorestframework
এটি ইনস্টল হওয়ার পর, আপনাকে settings.py ফাইলে এটি যোগ করতে হবে।
# settings.py
INSTALLED_APPS = [
# অন্যান্য অ্যাপ
'rest_framework', # Django REST Framework অ্যাপ
]
এখানে:
rest_frameworkঅ্যাপটি Django তে RESTful API তৈরি করার জন্য প্রয়োজনীয় টুলস প্রদান করে।
২. RESTful API এর মূল ধারণা
REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল, যা HTTP প্রটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা ট্রান্সফার করতে সাহায্য করে। RESTful API গুলি HTTP Methods (GET, POST, PUT, DELETE) ব্যবহার করে CRUD (Create, Read, Update, Delete) অপারেশনগুলো সম্পাদন করে।
- GET: সার্ভার থেকে ডেটা পাওয়া
- POST: সার্ভারে নতুন ডেটা তৈরি করা
- PUT: সার্ভারে বিদ্যমান ডেটা আপডেট করা
- DELETE: সার্ভার থেকে ডেটা মুছে ফেলা
৩. Django তে RESTful API তৈরি করা
এখন আমরা Django তে একটি সাধারণ RESTful API তৈরি করবো, যেখানে একটি মডেল থাকবে এবং আমরা API এর মাধ্যমে ডেটা অ্যাক্সেস করবো।
১. মডেল তৈরি
ধরা যাক, আমরা একটি Book মডেল তৈরি করবো, যেখানে বইয়ের নাম, লেখক এবং প্রকাশন তারিখ থাকবে।
# models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
published_date = models.DateField()
def __str__(self):
return self.title
২. Serializer তৈরি
Django REST framework তে serializer ক্লাসের মাধ্যমে মডেল ডেটাকে JSON ফরম্যাটে রূপান্তর করা হয়। সুতরাং, আমাদের Book মডেলের জন্য একটি serializer তৈরি করতে হবে।
# serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'author', 'published_date']
এখানে:
BookSerializerমডেল থেকে ডেটা JSON ফরম্যাটে রূপান্তর করার জন্য ব্যবহার করা হবে।ModelSerializerহল DRF এর একটি কনভেনিয়েন্ট ক্লাস যা মডেলের ফিল্ডগুলোর সাথে অটোমেটিক্যালি কাজ করে।
৩. Views তৈরি
আমরা Django তে APIView অথবা ViewSets ব্যবহার করে API views তৈরি করতে পারি। এই উদাহরণে, আমরা APIView ব্যবহার করবো।
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer
class BookList(APIView):
def get(self, request):
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
def post(self, request):
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
এখানে:
BookListক্লাসটি একটি API view যা GET এবং POST মেথড সমর্থন করে।getমেথড সমস্ত বইয়ের ডেটা রিটার্ন করে।postমেথড নতুন বইয়ের ডেটা গ্রহণ করে এবং সেগুলো ডাটাবেসে সেভ করে।
৪. URL Routing
এখন, আপনাকে urls.py ফাইলে এই API view গুলি রাউট করতে হবে।
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('books/', views.BookList.as_view(), name='book_list'),
]
এখানে:
BookList.as_view()এইভাবে আমরাAPIViewক্লাসটিকে URL এর সাথে সংযুক্ত করেছি।
৪. API ব্যবহার
এখন আপনার Django অ্যাপ্লিকেশন চলমান অবস্থায়, আপনি নিম্নলিখিত API রিকোয়েস্টগুলো পাঠাতে পারেন:
১. GET রিকোয়েস্ট
আপনি /books/ পাথে GET রিকোয়েস্ট পাঠিয়ে সমস্ত বইয়ের ডেটা পাবেন।
GET http://127.0.0.1:8000/books/
এটি JSON রেসপন্স ফিরিয়ে দেবে:
[
{
"id": 1,
"title": "Book 1",
"author": "Author 1",
"published_date": "2024-01-01"
},
{
"id": 2,
"title": "Book 2",
"author": "Author 2",
"published_date": "2024-01-02"
}
]
২. POST রিকোয়েস্ট
আপনি /books/ পাথে POST রিকোয়েস্ট পাঠিয়ে একটি নতুন বইয়ের তথ্য যোগ করতে পারেন।
POST http://127.0.0.1:8000/books/
Content-Type: application/json
{
"title": "New Book",
"author": "New Author",
"published_date": "2024-01-03"
}
এটি একটি নতুন বই সেভ করে এবং সফল রেসপন্স ফিরিয়ে দেবে।
৫. Django তে API Authentication এবং Permissions
Django REST framework তে API এর authentication এবং permissions সিস্টেম রয়েছে, যা ব্যবহারকারীদের অনুমতি নিয়ন্ত্রণ করতে সাহায্য করে। আপনি বিভিন্ন ধরণের authentication (যেমন, Token-based authentication, Session-based authentication) ব্যবহার করতে পারেন এবং বিভিন্ন permission সেট করে নির্দিষ্ট ইউজারদের অ্যাক্সেস দিতে পারেন।
এগুলোর কনফিগারেশন আপনার API এর নিরাপত্তা বৃদ্ধি করে।
সারাংশ
Django তে RESTful API তৈরি করার জন্য Django REST framework (DRF) ব্যবহৃত হয়, যা API তৈরির প্রক্রিয়াকে সহজ এবং কার্যকরী করে তোলে। আপনি views, serializers, URLs, এবং authentication সিস্টেম ব্যবহার করে দ্রুত RESTful API তৈরি করতে পারেন। Django এর সাথে Ajax এবং JavaScript ব্যবহার করে ক্লায়েন্ট সাইড থেকে এই API গুলির সাথে ইন্টারঅ্যাক্ট করা সম্ভব।
Read more